<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="generator" content="AsciiDoc 8.5.2"/>
<title>ASAP - Another Slight Atari Player</title>
<style type="text/css">
/* Debug borders */
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
/*
  border: 1px solid red;
*/
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

tt {
  color: navy;
}

h1, h2, h3, h4, h5, h6 {
  color: #c02020;
  font-family: sans-serif;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}

div.sectionbody {
  font-family: serif;
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li &gt; p {
  margin-top: 0;
}

pre {
  padding: 0;
  margin: 0;
}

span#author {
  color: #c02020;
  font-family: sans-serif;
  font-weight: bold;
  font-size: 1.1em;
}
span#email {
}
span#revnumber, span#revdate, span#revremark {
  font-family: sans-serif;
}

div#footer {
  font-family: sans-serif;
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
div#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
div#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

div#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #c02020;
  font-family: sans-serif;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock &gt; div.content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}

div.listingblock &gt; div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #dddddd;
  color: #777777;
}

div.quoteblock &gt; div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock &gt; div.content {
  white-space: pre;
}
div.verseblock &gt; div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #c02020;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock &gt; div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd &gt; *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

div.tableblock &gt; table {
  border: 3px solid #c02020;
}
thead, p.table.header {
  font-family: sans-serif;
  font-weight: bold;
}
tfoot {
  font-weight: bold;
}
td &gt; div.verse {
  white-space: pre;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock &gt; table[frame="void"] {
  border-style: none;
}
div.tableblock &gt; table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock &gt; table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}


@media print {
  div#footer-badges { display: none; }
}

div#toc {
  margin-bottom: 2.5em;
}

div#toctitle {
  color: #c02020;
  font-family: sans-serif;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}
/* Workarounds for IE6's broken and incomplete CSS2. */

div.sidebar-content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}
div.sidebar-title, div.image-title {
  color: #c02020;
  font-family: sans-serif;
  font-weight: bold;
  margin-top: 0.0em;
  margin-bottom: 0.5em;
}

div.listingblock div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock-attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock-content {
  white-space: pre;
}
div.verseblock-attribution {
  padding-top: 0.75em;
  text-align: left;
}

div.exampleblock-content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

/* IE6 sets dynamically generated links as visited. */
div#toc a:visited { color: blue; }
</style>
<script type="text/javascript">
/*<![CDATA[*/
window.onload = function(){asciidoc.footnotes();}
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  var cont = document.getElementById("content");
  var noteholder = document.getElementById("footnotes");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      // Use [\s\S] in place of . so multi-line matches work.
      // Because JavaScript has no s (dotall) regex flag.
      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      spans[i].innerHTML =
        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
        "' title='View footnote' class='footnote'>" + n + "</a>]";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
}

}
/*]]>*/
</script>
</head>
<body>
<div id="header">
<h1>ASAP - Another Slight Atari Player</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>ASAP is a player of <a href="http://en.wikipedia.org/wiki/Atari_8-bit_family">8-bit Atari</a>
music for modern computers.
It emulates the <a href="http://en.wikipedia.org/wiki/POKEY">POKEY sound chip</a>
and the <a href="http://en.wikipedia.org/wiki/6502">6502 processor</a>.
The project was initially based on the routines from the
<a href="http://atari800.sourceforge.net/">Atari800 emulator</a>,
but the current version has a completely new original emulation core.</p></div>
<div class="paragraph"><p>ASAP includes the following programs:</p></div>
<div class="ulist compact"><ul>
<li>
<p>
asapconv - portable command-line converter 
</p>
</li>
<li>
<p>
WASAP - tiny player for Windows 
</p>
</li>
<li>
<p>
plugin for <a href="http://koti.welho.com/hylinen/apollo/">Apollo</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://foobar2000.org/">foobar2000</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://hp.vector.co.jp/authors/VA032810/">GSPlayer</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://moc.daper.net/">MOC</a>
</p>
</li>
<li>
<p>
plugin for <a href="http://www.winamp.com/">Winamp</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://www.microsoft.com/windows/windowsmedia/player/">Windows Media Player</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://xbmc.org/">XBMC</a> 
</p>
</li>
<li>
<p>
plugin for <a href="http://xmms.org/">XMMS</a>
</p>
</li>
<li>
<p>
plugin for <a href="http://www.un4seen.com/">XMPlay</a> 
</p>
</li>
<li>
<p>
POKEY sound emulation DLL for <a href="http://raster.infos.cz/atari/rmt/rmt.htm">Raster Music Tracker</a> 
</p>
</li>
<li>
<p>
Java version of ASAP2WAV - command-line converter to WAV files 
</p>
</li>
<li>
<p>
Java applet - for web pages 
</p>
</li>
<li>
<p>
Java midlet - for mobile devices 
</p>
</li>
<li>
<p>
C# version of ASAP2WAV
</p>
</li>
<li>
<p>
experimental JScript version of ASAP2WAV running in Windows Script Host 
</p>
</li>
<li>
<p>
experimental JavaScript version of ASAP2WAV running in Firefox 
</p>
</li>
<li>
<p>
Flash player - for web pages 
</p>
</li>
</ul></div>
<div class="paragraph"><p>The summary of the differences between the above versions is in <a href="PORTS.xml">this table</a>.</p></div>
<div class="paragraph"><p>There are other projects which use ASAP:</p></div>
<div class="ulist compact"><ul>
<li>
<p>
<a href="http://mmsap.sourceforge.net/">mmSAP 2</a> - standalone player for GNU/Linux with GTK+ user interface
</p>
</li>
<li>
<p>
<a href="http://www.rockbox.org/">Rockbox</a> - open source firmware for MP3 players
</p>
</li>
</ul></div>
</div>
</div>
<h2 id="_input_file_formats">Input file formats</h2>
<div class="sectionbody">
<div class="paragraph"><p>ASAP supports the following file formats (determined by the filename extension):</p></div>
<div class="dlist compact"><dl>
<dt class="hdlist1">
SAP (Slight Atari Player)
</dt>
<dd>
<p>
The format designed for playing 8-bit Atari music on modern computers.
All other formats can be converted to SAP.
<a href="http://asma.atari.org/">Atari SAP Music Archive (ASMA)</a>
is a single big collection of SAP files.
</p>
</dd>
<dt class="hdlist1">
CMC (Chaos Music Composer)
</dt>
<dd>
<p>
Atari music editor from early 1990s.
</p>
</dd>
<dt class="hdlist1">
CM3 (CMC "3/4")
</dt>
<dd>
<p>
CMC with modified pattern length.
</p>
</dd>
<dt class="hdlist1">
CMR (CMC "Rzog")
</dt>
<dd>
<p>
CMC with modified bass sounds.
</p>
</dd>
<dt class="hdlist1">
CMS (Stereo Double CMC)
</dt>
<dd>
<p>
Stereo CMC.
</p>
</dd>
<dt class="hdlist1">
DMC (DoublePlay CMC)
</dt>
<dd>
<p>
CMC with 6502 routine executed at double rate of the original CMC.
</p>
</dd>
<dt class="hdlist1">
DLT (Delta Music Composer)
</dt>
<dd>
<p>
Atari music editor from 1990s.
</p>
</dd>
<dt class="hdlist1">
MPT (Music ProTracker)
</dt>
<dd>
<p>
Atari music editor from 1990s.
</p>
</dd>
<dt class="hdlist1">
MPD (MPT DoublePlay)
</dt>
<dd>
<p>
MPT with 6502 routine executed at double rate of the original MPT.
</p>
</dd>
<dt class="hdlist1">
RMT (<a href="http://raster.infos.cz/atari/rmt/rmt.htm">Raster Music Tracker</a>)
</dt>
<dd>
<p>
Modern Atari music editor running on Windows.
</p>
</dd>
<dt class="hdlist1">
TMC, TM8 (<a href="http://jaskier.atari8.info/">Theta Music Composer</a> 1.x)
</dt>
<dd>
<p>
Atari music editor from late 1990s.
The two file extensions are treated identically and played in stereo.
TM8 means it&#x2019;s stereo (8-channel) music while TMC can be either mono or stereo.
</p>
</dd>
<dt class="hdlist1">
TM2 (<a href="http://jaskier.atari8.info/">Theta Music Composer</a> 2.x)
</dt>
<dd>
<p>
Modern Atari music editor.
</p>
</dd>
</dl></div>
</div>
<h2 id="_compilation_instructions">Compilation instructions</h2>
<div class="sectionbody">
<h3 id="_required_tools">Required tools</h3><div style="clear:left"/>
<div class="paragraph"><p>For all builds you will need:</p></div>
<div class="dlist compact"><dl>
<dt class="hdlist1">
C/C++ compiler and Make utility
</dt>
<dd>
<p>
On Windows download <a href="http://www.mingw.org/">MinGW</a>
and install binutils, core compiler, g++ compiler, w32api and MinGW Make.
</p>
</dd>
<dt class="hdlist1">
Perl
</dt>
<dd>
<p>
On Windows install either <a href="http://www.activestate.com/activeperl/">ActivePerl</a>
or <a href="http://cygwin.com/">Cygwin</a>'s Perl.
</p>
</dd>
<dt class="hdlist1">
xasm and MADS
</dt>
<dd>
<p>
If you are compiling latest source code from Git, install
<a href="http://xasm.atari.org/">xasm</a> and <a href="http://mads.atari8.info/">MADS</a>.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>Make sure these tools are on your <tt>PATH</tt>.</p></div>
<h3 id="_getting_officially_released_source_code">Getting officially released source code</h3><div style="clear:left"/>
<div class="paragraph"><p>If you want to compile an official release of ASAP, download source distribution
(<tt>asap-*.tar.gz</tt>) and uncompress it to a directory of your choice.</p></div>
<div class="paragraph"><p>On Unix-like systems:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>tar zxf asap-*.tar.gz</tt></pre>
</div></div>
<div class="paragraph"><p>On Windows you may use <a href="http://7-zip.org/">7-Zip</a>.</p></div>
<h3 id="_getting_latest_source_code">Getting latest source code</h3><div style="clear:left"/>
<div class="paragraph"><p>Alternatively you may get the latest version from the Git repository.
To do this using a command-line Git client:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>git clone git://asap.git.sourceforge.net/gitroot/asap/asap</tt></pre>
</div></div>
<div class="paragraph"><p>This will fetch the latest code to a new directory called <tt>asap</tt>.</p></div>
<h3 id="_building_asapconv_and_libasap_on_unix_like_systems">Building asapconv and libasap on Unix-like systems</h3><div style="clear:left"/>
<div class="paragraph"><p>From your shell prompt navigate to the directory which contains <tt>asap.c</tt>.</p></div>
<div class="paragraph"><p>To compile and install, run the following commands:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make
make install</tt></pre>
</div></div>
<div class="paragraph"><p>The second command must be run with super-user priviledges.
It installs the command-line converter and the C library under the directory
specified as <tt>PREFIX</tt> in the <tt>Makefile</tt>
(<tt>/usr/local</tt>, feel free to edit <tt>Makefile</tt>).</p></div>
<h3 id="_using_asapconv">Using asapconv</h3><div style="clear:left"/>
<div class="paragraph"><p>Run the program from command line to see the syntax.
The <tt>-o</tt>/<tt>--output</tt> option selects the output format and is mandatory.</p></div>
<h3 id="_using_libasap">Using libasap</h3><div style="clear:left"/>
<div class="paragraph"><p>The library is documented in the <tt>asap.h</tt> header file.
Be warned there might be breaking changes in the future versions of the library.</p></div>
<h3 id="_building_the_xmms_plugin_on_unix_like_systems">Building the XMMS plugin on Unix-like systems</h3><div style="clear:left"/>
<div class="paragraph"><p>You need full XMMS installation.
If you have just the XMMS binary package installed, you additionally need
<tt>xmms-devel</tt>. I have tested only the 1.2.10 version of XMMS.
XMMS itself depends on Gtk+ and Glib, so you need them too.</p></div>
<div class="paragraph"><p>To compile, run the following command:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make asap-xmms</tt></pre>
</div></div>
<div class="paragraph"><p>If the compilation finished successfully, you can install the plugin
in your home directory:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make install-xmms-user</tt></pre>
</div></div>
<div class="paragraph"><p>or, if you are root, for all users:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make install-xmms</tt></pre>
</div></div>
<div class="paragraph"><p>If you have another XMMS plugin that supports 8-bit Atari music,
remove it in order to avoid conflicts.</p></div>
<h3 id="_building_the_moc_plugin_on_unix_like_systems">Building the MOC plugin on Unix-like systems</h3><div style="clear:left"/>
<div class="paragraph"><p>You need source code of MOC. The plugin is compatible with MOC 2.4.x
and MOC 2.5.0 alpha.</p></div>
<div class="paragraph"><p>Edit <tt>Makefile</tt>. Pay attention to <tt>MOC_INCLUDE</tt> and <tt>MOC_PLUGIN_DIR</tt>.</p></div>
<div class="paragraph"><p>Then use the following commands:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make asap-moc
make install-moc</tt></pre>
</div></div>
<h3 id="_building_the_xbmc_plugin_on_linux">Building the XBMC plugin on Linux</h3><div style="clear:left"/>
<div class="paragraph"><p>You need source code of the Linux port of XBMC. Make sure it includes
support for ASAP.</p></div>
<div class="paragraph"><p>Edit <tt>Makefile</tt>.
<tt>XBMC_DLL_LOADER_EXPORTS</tt> must point to the directory in XBMC sources
which contains <tt>wrapper.def</tt> and <tt>wrapper.o</tt>.</p></div>
<div class="paragraph"><p>Then run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make asap-xbmc</tt></pre>
</div></div>
<div class="paragraph"><p>You will get <tt>xbmc_asap-i486-linux.so</tt>.</p></div>
<h3 id="_building_asapconv_wasap_winamp_gsplayer_apollo_xmplay_plugins_rmt_dll_asapscan_and_libasap_on_windows">Building asapconv, WASAP, Winamp/GSPlayer/Apollo/XMPlay plugins, RMT DLL, asapscan and libasap on Windows</h3><div style="clear:left"/>
<div class="paragraph"><p>From the command prompt navigate to the <tt>win32</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make mingw</tt></pre>
</div></div>
<div class="paragraph"><p>You should get <tt>asapconv.exe</tt>, <tt>wasap.exe</tt>, <tt>in_asap.dll</tt>, <tt>gspasap.dll</tt>,
<tt>ASAP_Apollo.dll</tt>, <tt>xmp-asap.dll</tt>, <tt>apokeysnd.dll</tt>, <tt>asapscan.exe</tt> and <tt>libasap.a</tt>.</p></div>
<h3 id="_building_windows_media_player_plugin_and_asap_lib_on_windows">Building Windows Media Player plugin and asap.lib on Windows</h3><div style="clear:left"/>
<div class="paragraph"><p>You additionally need
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&amp;displaylang=en">Windows SDK</a>
(install native C++ compiler, headers, libraries and samples).
Set <tt>Path</tt>, <tt>INCLUDE</tt> and <tt>LIB</tt> environment variables
to point to the right locations in the Windows SDK.
Make sure <tt>DSHOW_BASECLASSES_DIR</tt> is set correctly in <tt>win32\Makefile</tt>.</p></div>
<div class="paragraph"><p>From the command prompt navigate to the <tt>win32</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make dsf asap.lib</tt></pre>
</div></div>
<div class="paragraph"><p>You will get <tt>asap_dsf.dll</tt> and <tt>asap.lib</tt>.</p></div>
<h3 id="_building_the_foobar2000_plugin_on_windows">Building the foobar2000 plugin on Windows</h3><div style="clear:left"/>
<div class="paragraph"><p>In addition to the common prerequisites and Windows SDK you need
foobar2000 1.0 SDK - extract it to a new directory called
<tt>foobar2000_SDK</tt> next to (not inside!) the ASAP directory.</p></div>
<div class="paragraph"><p>From the command prompt navigate to the <tt>win32</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make foo</tt></pre>
</div></div>
<div class="paragraph"><p>This should produce <tt>foo_asap.dll</tt>.</p></div>
<h3 id="_building_the_gsplayer_plugin_for_windows_ce">Building the GSPlayer plugin for Windows CE</h3><div style="clear:left"/>
<div class="paragraph"><p>You need <a href="http://cegcc.sourceforge.net/">CeGCC</a>.
From the command prompt navigate to the <tt>gsplayer</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make wince</tt></pre>
</div></div>
<div class="paragraph"><p>This should produce <tt>gspasap.dll</tt> for ARM processors.</p></div>
<h3 id="_building_java_asap2wav_applet_and_midlet">Building Java ASAP2WAV, applet and midlet</h3><div style="clear:left"/>
<div class="paragraph"><p>You need Java Development Kit (JDK), a C preprocessor (a component
of a C compiler) and a Make utility. To compile the midlet, you additionally
need Perl and a Wireless Toolkit (WTK) - I use Sony Ericsson SDK
for the Java ME Platform, although Sun&#x2019;s WTK should work too after adjusting
paths.</p></div>
<div class="paragraph"><p>Edit the paths at the top of <tt>java/Makefile</tt> so they point to your installed
tools. From the command prompt navigate to the <tt>java</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make</tt></pre>
</div></div>
<div class="paragraph"><p>This should produce <tt>asap2wav.jar</tt>, <tt>asap_applet.jar</tt>, <tt>asap_midlet.jar</tt>
and <tt>asap_midlet.jad</tt>.</p></div>
<h3 id="_building_c_asap2wav_on_windows">Building C# ASAP2WAV on Windows</h3><div style="clear:left"/>
<div class="paragraph"><p>You need .NET Framework, of course.</p></div>
<div class="paragraph"><p>From the command prompt navigate to the <tt>csharp</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make</tt></pre>
</div></div>
<div class="paragraph"><p>This should produce <tt>asap2wav.exe</tt>.</p></div>
<h3 id="_building_the_xbmc_plugin_on_windows">Building the XBMC plugin on Windows</h3><div style="clear:left"/>
<div class="paragraph"><p>You need Visual C+\+ Toolkit (it used to be a free download from Microsoft,
now search the internet for <tt>VCToolkitSetup.exe</tt>) or Microsoft Visual C++ 2003.</p></div>
<div class="paragraph"><p>Navigate to the <tt>win32</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>mingw32-make xbmc</tt></pre>
</div></div>
<div class="paragraph"><p>This should produce <tt>xbmc_asap.dll</tt>, which you can use with XBox
or Windows version of XBMC. The XBMC must include support for ASAP.</p></div>
<h3 id="_building_jscript_asap2wav_and_javascript_asap2wav_for_web_browsers">Building JScript ASAP2WAV and JavaScript ASAP2WAV for web browsers</h3><div style="clear:left"/>
<div class="paragraph"><p>Navigate to the <tt>javascript</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make</tt></pre>
</div></div>
<div class="paragraph"><p>(or <tt>mingw32-make</tt>).</p></div>
<div class="paragraph"><p>The results are <tt>asap2wav.js</tt> and <tt>asapweb.js</tt>.</p></div>
<h3 id="_building_flash_player_version_of_asap">Building Flash player version of ASAP</h3><div style="clear:left"/>
<div class="paragraph"><p>You need <a href="http://www.adobe.com/products/flex/flexdownloads/">Flex SDK</a>.
Add its <tt>bin</tt> directory to your <tt>PATH</tt>.</p></div>
<div class="paragraph"><p>Navigate to the <tt>flash</tt> directory and run:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>make</tt></pre>
</div></div>
<div class="paragraph"><p>(or <tt>mingw32-make</tt>).</p></div>
<div class="paragraph"><p>You should get <tt>asap.swf</tt>.</p></div>
</div>
<h2 id="_history">History</h2>
<div class="sectionbody">
<div class="dlist compact"><dl>
<dt class="hdlist1">
ASAP 2.1.0 (2010-02-02)
</dt>
<dd>
<p>
ASAP2WAV has been replaced with asapconv which can additionally
convert native modules to and from the SAP format, edit SAP tags
and write MP3 files using <a href="http://lame.sourceforge.net/">LAME</a>.
A plugin for XMPlay has been created.
The foobar2000 plugin has been updated to foobar2000 1.0.
Time detection of RMT files has been fixed.
PLAYER tag is now optional for TYPE D SAP files.
"File Information" window now includes a better validation.
Windows Media Player&#x2019;s "Open" now includes ASAP file types.
WASAP has a progress bar for writing WAV files. Flash player uses DEFSONG.
Source code has been improved and moved from CVS to Git repository.
</p>
</dd>
<dt class="hdlist1">
ASAP 2.0.0 (2009-12-10)
</dt>
<dd>
<p>
Windows setup has been created. ASAP has been ported to Flash Player
and experimentally to JavaScript. New input formats: DLT, CMS and CM3
are supported. GTIA sound and COVOX are emulated. WASAP now includes
"Save as WAV". JavaScript interface of the Java applet has been changed.
There were huge changes in the build process: on Unix/Linux it no longer uses
the "configure" script and on Windows it uses MinGW for almost all binaries
(they are smaller than Visual C++ 2008&#x2019;s, compatible with Windows 9x,
wildcards work in ASAP2WAV).
</p>
</dd>
<dt class="hdlist1">
ASAP 1.2.1 (2009-05-08)
</dt>
<dd>
<p>
XBMC plugin and POKEY emulation DLL for RMT have been created.
The midlet has a progress bar, tags display, subsong selection
and better performance. SKCTL emulation has been slightly improved.
Documentation has been converted from plain text to HTML.
</p>
</dd>
<dt class="hdlist1">
ASAP 1.2.0 (2008-03-29)
</dt>
<dd>
<p>
Plugins for Windows Media Player and Apollo have been created.
RMT duration detection has been improved. A bug in TMC to SAP conversion
has been fixed. ASAP can be compiled as C#.
</p>
</dd>
<dt class="hdlist1">
ASAP 1.1.0 (2008-02-17)
</dt>
<dd>
<p>
All formats supported by ASAP can be converted to and from the SAP format,
using the file information window of WASAP or the Winamp plugin.
Unlike SAP Maker, ASAP supports subsongs and TIME tags.
POKEY emulation has improved a little. Bugs in the XMMS plugin, the foobar2000
plugin and the applet have been fixed.
</p>
</dd>
<dt class="hdlist1">
ASAP 1.0.2 (2007-11-02)
</dt>
<dd>
<p>
TIME tags can be edited in the file information window of WASAP
and the Winamp plugin. A few emulation bugs have been fixed.
Some user interface issues in WASAP have been fixed.
</p>
</dd>
<dt class="hdlist1">
ASAP 1.0.1 (2007-06-10)
</dt>
<dd>
<p>
Plugin for MOC (Music On Console) has been created. WASAP, Winamp plugin
and foobar2000 plugin can edit AUTHOR, NAME and DATE tags in SAP files.
Winamp and XMMS plugins format titles as specified by the player.
TMC files are now played in stereo. A few minor bugs have been fixed.
</p>
</dd>
<dt class="hdlist1">
ASAP 1.0.0 (2007-05-28)
</dt>
<dd>
<p>
This release introduces completely new 6502 and POKEY emulation.
SAP files with samples are supported. ASAP can be compiled as Java - an applet
and an experimental midlet have been created.
Winamp, foobar2000 and GSPlayer plugins support silence detection
and muting selected POKEY channels. Winamp plugin supports subsongs
and Winamp&#x2019;s equalizer.
</p>
</dd>
<dt class="hdlist1">
ASAP 0.3.0 (2007-05-06)
</dt>
<dd>
<p>
This release adds support for AUTHOR, NAME, DATE and TIME tags in SAP files.
Winamp, foobar2000 and the new GSPlayer plugin have configurable playback time
for songs with no TIME tag and songs marked with LOOP.
foobar2000 plugin has been updated for version 0.9 of foobar2000.
XMMS plugin supports the TM8 extension.
</p>
</dd>
<dt class="hdlist1">
ASAP 0.2.1 (2006-01-28)
</dt>
<dd>
<p>
This release supports TM2 (Theta Music Composer 2.x) file format.
Compilation and installation on Unix-like systems have been improved.
foobar2000 plugin supports subsongs.
</p>
</dd>
<dt class="hdlist1">
ASAP 0.2.0 (2006-01-15)
</dt>
<dd>
<p>
This release supports stereo and 16-bit audio output (enabled by default).
Compressed SAP files (for example Fractals.sap) are played correctly.
Subsongs are supported in RMT files.
There are new plugins: for XMMS and for foobar2000 version 0.8.
WASAP supports Windows Explorer&#x2019;s "Open with".
</p>
</dd>
<dt class="hdlist1">
ASAP 0.1.0 (2005-12-31)
</dt>
<dd>
<p>
This is the initial release of ASAP (Another Slight Atari
Player) - a player/converter of 8-bit Atari music for modern computers.
ASAP provides high-quality, identical to the popular Atari800 emulator,
emulation of the POKEY sound chip and the 6502 processor.
</p>
<div class="paragraph"><p>This release includes: ASAP2WAV - portable command-line utility for converting
8-bit Atari music to WAV files, WASAP - a tiny player for Windows
and in_asap - a Winamp plugin. Currently supported input formats are:
SAP (except for samples and stereo), CMC, CMR, DMC, MPT (without samples),
MPD, RMT (mono) and TMC (mono).</p></div>
</dd>
</dl></div>
</div>
<h2 id="_authors">Authors</h2>
<div class="sectionbody">
<div class="dlist compact"><dl>
<dt class="hdlist1">
Piotr Fusik &lt;<a href="mailto:fox@scene.pl">fox@scene.pl</a>&gt;
</dt>
<dd>
<p>
Creator and main developer.
</p>
</dd>
<dt class="hdlist1">
Atari800 Emulator Developers (<a href="http://atari800.sourceforge.net">http://atari800.sourceforge.net</a>)
</dt>
<dd>
<p>
6502 and POKEY emulation used in 0.x.y versions of ASAP.
</p>
</dd>
<dt class="hdlist1">
Zdenek Eisenhammer &lt;<a href="mailto:pg@pinknet.cz">pg@pinknet.cz</a>&gt;
</dt>
<dd>
<p>
Testing.
</p>
</dd>
<dt class="hdlist1">
Henryk Karpowicz &lt;<a href="mailto:henkar@poczta.tygrys.net">henkar@poczta.tygrys.net</a>&gt;
</dt>
<dd>
<p>
CMC routine modified for the CM3 format.
</p>
</dd>
<dt class="hdlist1">
Maciek Konecki &lt;<a href="mailto:maciusk1@wp.pl">maciusk1@wp.pl</a>&gt;
</dt>
<dd>
<p>
Porting to C#.
</p>
</dd>
<dt class="hdlist1">
Marek Konopka &lt;<a href="mailto:konop11@poczta.onet.pl">konop11@poczta.onet.pl</a>&gt;
</dt>
<dd>
<p>
6502 routine for playing DLT.
</p>
</dd>
<dt class="hdlist1">
Marcin Lewandowski &lt;<a href="mailto:jaskier@atari8.info">jaskier@atari8.info</a>&gt;
</dt>
<dd>
<p>
6502 routines for playing CMC, MPT, TMC and TM2.
</p>
</dd>
<dt class="hdlist1">
Adrian Matoga &lt;<a href="mailto:epi@atari8.info">epi@atari8.info</a>&gt;
</dt>
<dd>
<p>
COVOX information and test files. Testing.
</p>
</dd>
<dt class="hdlist1">
Perry McFarlane &lt;<a href="mailto:perry_m@fastmail.fm">perry_m@fastmail.fm</a>&gt;
</dt>
<dd>
<p>
POKEY reverse-engineering.
</p>
</dd>
<dt class="hdlist1">
Kostas Nakos &lt;<a href="mailto:knakos@gmail.com">knakos@gmail.com</a>&gt;
</dt>
<dd>
<p>
Windows CE testing.
</p>
</dd>
<dt class="hdlist1">
Mariusz Rozwadowski &lt;<a href="mailto:ramosc64@o2.pl">ramosc64@o2.pl</a>&gt;
</dt>
<dd>
<p>
Suggested CMS, CM3 and DLT format support.
</p>
</dd>
<dt class="hdlist1">
Slawomir Sledz &lt;<a href="mailto:slaves@scene.pl">slaves@scene.pl</a>&gt;
</dt>
<dd>
<p>
Testing.
</p>
</dd>
<dt class="hdlist1">
David Spilka
</dt>
<dd>
<p>
6502 routine for playing CMS.
</p>
</dd>
<dt class="hdlist1">
Radek Sterba &lt;<a href="mailto:raster@infos.cz">raster@infos.cz</a>&gt;
</dt>
<dd>
<p>
6502 routine for playing RMT.
Testing.
</p>
</dd>
<dt class="hdlist1">
Lukasz Sychowicz &lt;<a href="mailto:xray@scene.pl">xray@scene.pl</a>&gt;
</dt>
<dd>
<p>
Windows icons.
Testing.
</p>
</dd>
<dt class="hdlist1">
Pawel Szewczyk &lt;<a href="mailto:ripek@op.pl">ripek@op.pl</a>&gt;
</dt>
<dd>
<p>
Windows setup graphics.
</p>
</dd>
<dt class="hdlist1">
Michal Szpilowski &lt;<a href="mailto:miker@atari.pl">miker@atari.pl</a>&gt;
</dt>
<dd>
<p>
Testing.
</p>
</dd>
<dt class="hdlist1">
Grzegorz Zyla &lt;<a href="mailto:gsunr@poczta.onet.pl">gsunr@poczta.onet.pl</a>&gt;
</dt>
<dd>
<p>
XBMC plugin testing.
</p>
</dd>
</dl></div>
</div>
<h2 id="_feedback">Feedback</h2>
<div class="sectionbody">
<div class="paragraph"><p>If you are interested in the ASAP project, please subscribe its
<a href="https://lists.sourceforge.net/lists/listinfo/asap-users">mailing list</a>.
This list is for users and developers.
Once you subscribe, you can post comments, ideas and questions about ASAP.
They will be answered ASAP. ;-)</p></div>
<div class="paragraph"><p>Use <a href="http://sourceforge.net/tracker/?group_id=154391">tracker</a>
to submit bug reports, feature requests and small code patches.</p></div>
</div>
</div>
<div id="footnotes"><hr/></div>
<div id="footer">
<div id="footer-text">
Last updated 2010-02-02 
</div>
</div>
</body>
</html>
